package SubjectHashTable;

import java.util.HashMap;
import java.util.Map;

public class CanConstruct {

/**
 * 难度：简单
 * 
 * 383. 赎金信
 * 	给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串，判断第一个字符
 * 	串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成，返
 * 	回 true ；否则返回 false。
 * 	(题目说明：为了不暴露赎金信字迹，要从杂志上搜索各个需要的字母，组成单词来表达意思。
 * 	杂志字符串中的每个字符只能在赎金信字符串中使用一次。)
 * 
 * 注意：
 * 	你可以假设两个字符串均只含有小写字母。
 * 	canConstruct("a", "b") -> false
 * 	canConstruct("aa", "ab") -> false
 * 	canConstruct("aa", "aab") -> true
 *
 * */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		CanConstruct cc = new CanConstruct();
		System.out.println(cc.canConstruct("aa", "aab"));
	}
	//自己写
	public boolean canConstruct(String ransomNote, String magazine) {
		char[] charArray1 = ransomNote.toCharArray();
		char[] charArray2 = magazine.toCharArray();
		Map<Character,Integer> map = new HashMap<>();
		for(char c:charArray2) {
			map.put(c, map.getOrDefault(c, 0)+1);
		}
		for(char c:charArray1) {
			map.put(c, map.getOrDefault(c, 0)-1);
			if(map.get(c)<0) {
				return false;
			}
		}
		return true;
    }
}
